package xyz.lne.researchgroupmanage.service;

import xyz.lne.researchgroupmanage.entity.ResearchGroup;
import com.baomidou.mybatisplus.extension.service.IService;
import xyz.lne.researchgroupmanage.service.dataTransferObject.*;

import java.util.List;

/**
 * 课题组服务
 * @author team7
 * @since 2021-01-19
 */
public interface ResearchGroupService extends IService<ResearchGroup> {

    /**
     * 查询我的课题组
     * @param userId 用户id
     * @return 我的课题组信息
     */
    List<ResearchGroupSimpleDTO> findMyResearchGroup(Integer userId);

    /**
     * 在所有课题组中，根据关键字，查询课题组信息
     * @param word 关键字
     * @return 课题组缩略信息
     */
    List<ResearchGroupSimpleDTO> findResearchGroupInAll(String word);

    /**
     * 在我的课题组中，根据关键字，查询课题组信息
     * @param userId 用户id
     * @param word 关键字
     * @return 课题组缩略信息
     */
    List<ResearchGroupSimpleDTO> findResearchGroupInMy(Integer userId, String word);

    /**
     * 获取课题组下的没有处理的所有课题申请
     * @param researchGroupId 课题组id
     * @return 课题组申请信息
     */
    List<ResearchApplicationDTO> findUntreatedResearchApplicationInResearchGroup(Integer researchGroupId);

    /**
     * 获取课题组下的没有处理的所有申请人申请
     * @param researchGroupId 课题组id
     * @return 申请人申请
     */
    List<ProposerApplicationDTO> findUntreatedProposerApplicationInResearchGroup(Integer researchGroupId);

    /**
     * 创建课题组
     * @param account 课题组账号
     * @param name 课题组名称
     * @param introduction 课题组简介
     * @param researchGroupImg 课题组图片url
     * @param userId 负责人id
     * @return 影响行数
     */
    Integer createResearchGroup(String account, String name, String introduction, String researchGroupImg,
                                Integer userId, List<Integer> keywordIdList);

    /**
     * 更新课题组
     * @param account 课题组账号
     * @param name 课题组名称
     * @param introduction 课题组简介
     * @param researchGroupImg 课题组图片url
     * @param userId 负责人id
     * @return 影响行数
     */
    Integer updateResearchGroup(Integer researchGroupId, String account, String name, String introduction, String researchGroupImg,
                                Integer userId, List<Integer> keywordIdList);


    /**
     * 通过课题组id号码，删除课题组
     * @param researchGroupId 课题组id
     * @return 影响行数
     */
    Integer deleteResearchGroupByResearchGroupId(Integer researchGroupId);

    /**
     * 查询用户创建的课题组
     * @param userId 用户id
     * @return 课题组DTO
     */
    List<ResearchGroupSimpleDTO> findCreatedResearchGroupByUserId(Integer userId);

    /**
     * 查询用户加入的课题组
     * @param userId 用户id
     * @return 课题组DTO
     */
    List<ResearchGroupSimpleDTO> findJoinedResearchGroupByUserId(Integer userId);

    /**
     * 课题组具体页面
     * @param researchGroupId 课题组id
     * @return 课题组dto
     */
    ResearchGroupDTO findResearchGroupById(Integer researchGroupId);

    /**
     * 课题组成员管理 同意OR拒绝 根据status
     * @param status 申请状态
     * @return 影响行数
     */
    Integer manageResearchGroupUser(Integer researchGroupId, Integer userId, Integer status);

    /**
     * 课题组课题管理 同意OR拒绝 根据status
     * @param status 申请状态
     * @return 影响行数
     */
    Integer manageResearchGroupResearch(Integer researchId, Integer userId, Integer status);


    /**
     * 查询课题组下的所有用户
     * @param researchGroupId 课题组id
     * @return 用户信息
     */
    List<UserDTO> findAllResearchGroupUsers(Integer researchGroupId);

    /**
     * 查询课题组下的所有课题
     * @param researchGroupId 课题组id
     * @return 课题组下的所有课题dto
     */
    List<ResearchDTO> findAllResearchByResearchGroupId(Integer researchGroupId);

    List<UserInResearchGroupDTO> findUserInResearchGroup(Integer researchGroupId);

    /**
     * 申请加入课题组
     * @param userId
     * @param researchGroupId
     * @return
     */
    Integer applyJoinResearchGroup(Integer userId, Integer researchGroupId);

}
